#include<stdio.h> 
#include "main.h"

/*单链表初始化。初始化成功函数返回0，否则返回1。*/
int ListInitiate(LNode **head){
*head = (LNode *)malloc(sizeof(LNode));
	if(!(*head)){
		return 1;
	} 
	(*head)->next = NULL; 
	return 0;
}

/* 函数返回由head所表示的单链表的长度。*/
int ListLength(LNode *head){
	LNode *p = head;
	int size = 0;
	while(p->next != NULL){
		p = p->next;
		size = size+1;
	}
	return size;
}

// 在由head所表示的单链表里插入一个元素 x 到位置 i。
// 插入成功函数返回0，否则返回1。
int ListInsert(LNode *head, int i, DataType x){
LNode *p = head;
	int j = -1;
	while(p->next != NULL && j <i-1){
		p = p->next;
		j = j+1;
	}
	if(j != i-1){
		return 1;
	}
	LNode *q = (LNode *)malloc(sizeof(LNode));
	q->data = x;
	q->next = p->next;
	p->next = q;
	return 0;
}

// 在由head所表示的单链表里删除位置 i 上的元素并将其值存入 x 变量里。调用成功后，列表长度减1。
int ListDelete(LNode *head, int i, DataType *x){
LNode *p = head;
	int j = -1;
	while(p->next != NULL && p->next->next != NULL && j <i-1){
		p = p->next;
		j = j+1;
	}
	LNode *q = p->next;
	*x = q->data;
	p->next = p->next->next;
	free(q);
	return 0;
}

// 在由head所表示的单链表里获取位置 i 上的元素并将其值存入 x 变量里。调用成功后，列表长度不变。
int ListGet(LNode *head, int i, DataType *x){
	LNode *p = head;
	int j = -1;
	while(p->next != NULL && j <i){
		p = p->next;
		j = j+1;
	}
	*x = p->data;
	return 0;
}

// 释放所有的由head所表示的单链表里的元素节点（含头结点）。当释放完全成功时，函数返回0，否则返回1。
int Destroy(LNode **head){
	LNode *p,*q;
	p = *head;
	while(p->next != NULL){
		q = p;
		p = p->next;
		free(q);
	} 
	if(p->next != NULL){
		return 1;
	}
	*head = NULL;
	return 0;
}

    void main()
{
    LNode *head;
    int i , x;
    ListInitiate(&head);/*初始化*/
    for(i = 0; i < 10; i++) {
        if(ListInsert(head, i, i+1) == 1) /*插入10个数据元素*/
        {
            printf("错误! \n");
            system("pause");
        }
    }
    if(ListDelete(head, 4, &x) == 1) { /*删除数据元素5*/
        printf("错误! \n");
        system("pause");
    }
    printf("元素个数：%d\n", ListLength(head));
    for(i = 0; i < ListLength(head); i++) {
        if(ListGet(head, i, &x) == 1) /*取元素*/
        {
            printf("错误! \n");
            system("pause");
        }
        else printf("%d ", x);/*显示数据元素*/
    }
}
